#include <stdio.h>
#include <string.h>
#include <time.h>

#include "xx_def.h"



uchar str_hex_tbl_high[]=
{
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80,0x90,0xa0,0xb0,0xc0,0xd0,0xe0,0xf0,
	0x00,0xa0,0xb0,0xc0,0xd0,0xe0,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0xa0,0xb0,0xc0,0xd0,0xe0,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
uchar str_hex_tbl_low[]=
{
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
DLL_PUBLIC int nstr_hex(char* str,int len,char* out)
{
	int n=0;
	int var=0;
	int mod=0;
	int length=0;

	length=len;
	mod=length%2;
	if(mod)
	{
		return -1;
	}
	while(1)
	{
		if(n>=length || str[n]==0)
		{
			return 0;
		}	
		out[n]=str_hex_tbl_high[str[n*2]] | str_hex_tbl_low[str[n*2+1]];
		n++;
	}	
	return 0;
}

/*HEX转换字符*/
char *hex_str_tbl[]=
{
	"00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f",
	"10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f",
	"20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f",
	"30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f",
	"40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f",
	"50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f",
	"60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f",
	"70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f",
	"80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f",
	"90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f",
	"a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af",
	"b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf",
	"c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf",
	"d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df",
	"e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef",
	"f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff",
};
int hex_str(unsigned char *phex,char *str_buff,char *other_char)
{
	
	strcat(str_buff,hex_str_tbl[phex[0]]);			
	strcat(str_buff,other_char);
	return 0;
} 
DLL_PUBLIC int nhex_str(unsigned char *phex,int nhex,char *str_buff,char *other_char)
{
	int n;
	for(n=0;n<nhex;n++)
	{	
		strcat(str_buff,hex_str_tbl[phex[n]]);			
		strcat(str_buff,other_char);
	}
	return 0;
}


char *hex_char_tbl[]=
{
	".",".",".",".",".",".",".",".",".",".",".",".",".",".",".",".",
	".",".",".",".",".",".",".",".",".",".",".",".",".",".",".",".",
	" ","!","\"","#","$","%","&","'","(",")","*","+",",","-",".","/",
	"0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?",
	"@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O",
	"P","Q","R","S","T","U","V","W","X","Y","Z","[","\\","]","^","_",
	"`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o",
	"p","q","r","s","t","u","v","w","x","y","z","{","|","}","~",".",
	".",".",".",".",".",".",".",".",".",".",".",".",".",".",".",".",
	".",".",".",".",".",".",".",".",".",".",".",".",".",".",".",".",
	".",".",".",".",".",".",".",".",".",".",".",".",".",".",".",".",
	".",".",".",".",".",".",".",".",".",".",".",".",".",".",".",".",
	".",".",".",".",".",".",".",".",".",".",".",".",".",".",".",".",
	".",".",".",".",".",".",".",".",".",".",".",".",".",".",".",".",
	".",".",".",".",".",".",".",".",".",".",".",".",".",".",".",".",
	".",".",".",".",".",".",".",".",".",".",".",".",".",".",".",".",
};
DLL_PUBLIC int  nhex_char(unsigned char *phex,int nchar,char *str_buff)
{
	int n;
	for(n=0;n<nchar;n++)
	{
		strcat(str_buff,hex_char_tbl[phex[n]]);
	}	
	return 0;
}

DLL_PUBLIC int dump_hex(unsigned char *phex,int hex_size,char *str_buff,int str_size,char *other_char)
{
	int m;
	int size;
	int offset=0;
	char stmp[0x50];
	for(size=0;size<hex_size;size++)
	{	
		if(strlen(str_buff)>str_size)
		{
			return -1;
		}
		if((size&0x0f)==0)
		{
			memset(stmp,0,sizeof(stmp));	
			sprintf(stmp,"%08x:",size);
			strcat(str_buff,stmp);
		}	
		offset=strlen(str_buff);
		hex_str(phex+size,str_buff+offset,other_char);
		
		m=0;
		if((size&0x0f)==0x0f)
		{
			memset(stmp,0,sizeof(stmp));
			nhex_char(phex+size-0x0f,0x10,stmp);
			strcat(str_buff,stmp);	
			strcat(str_buff,"\n");
		}
		
	}
	return 0;
}


DLL_PUBLIC int byte_opposite(uchar* src_hex,int src_len,uchar* des_hex)
{
	int n=0;
	int m=0;
	int o=0; 
	int a=0;
	
	o=src_len-1;
	m=src_len/2;
	for(a=0;a<=m;a++)
	{
		des_hex[a]=src_hex[o-a];
		des_hex[o-a]=src_hex[a];
		if(a>=m)
		{
			return 0;
		}
	}
	return -1;
}

